import socket
from ping3 import ping

def ping_host(host, timeout=1):
    """
    使用 ping3 库检测目标主机是否可以 Ping 通
    :param host: 目标主机 IP 或域名
    :param timeout: 超时时间（单位：秒）
    """
    response_time = ping(host, timeout=timeout)  # 发送 ICMP Echo 请求并等待回复
    if response_time is not None:
        #print(f"[+] {host} 可以 Ping 通！{response_time:.4f} 秒")
        return True
    else:
        return False
def scan_port(host, port):
    """
    扫描指定主机的指定端口
    :param host: 目标主机 IP 或域名
    :param port: 目标端口
    """
    try:
        # 创建 socket 对象
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置超时时间（单位：秒）
        sock.settimeout(1)
        # 尝试连接目标端口
        result = sock.connect_ex((host, port))
        if result == 0:
            print(f"[+] {host} 端口 {port} 是开放的")
        else:
            print(f"[-] {host} 端口 {port} 是关闭的")
        # 关闭 socket 连接
        sock.close()
    except Exception as e:
        print(f"[!] 扫描{host} 端口 {port} 时发生错误: {e}")

if __name__ == "__main__":
    target_host = "192.168.1."  # 目标主机 IP 或域名
    target_ports = [1000,3654,8080,8888]  # 要扫描的端口列表

    print(f"开始扫描主机:")
    for host in range(100):
        if ping_host(target_host+str(100+host)):
            for port in target_ports:
                scan_port(target_host+str(100+host), port)